//给定两个字符串 s 和 t ，编写一个函数来判断 t 是否是 s 的字母异位词。 
//
// 注意：若 s 和 t 中每个字符出现的次数都相同，则称 s 和 t 互为字母异位词。 
//
// 
//
// 示例 1: 
//
// 
//输入: s = "anagram", t = "nagaram"
//输出: true
// 
//
// 示例 2: 
//
// 
//输入: s = "rat", t = "car"
//输出: false 
//
// 
//
// 提示: 
//
// 
// 1 <= s.length, t.length <= 5 * 10⁴ 
// s 和 t 仅包含小写字母 
// 
//
// 
//
// 进阶: 如果输入字符串包含 unicode 字符怎么办？你能否调整你的解法来应对这种情况？ 
//
// Related Topics 哈希表 字符串 排序 👍 876 👎 0


package LeetCode.editor.cn;

import java.util.Arrays;

/**
 * @author ldltd
 * @date 2023-12-20 20:37:10
 * @description 242.有效的字母异位词
 */
public class ValidAnagram{
	 public static void main(String[] args) {
	 	 //测试代码
	 	 Solution solution = new ValidAnagram().new Solution();

	 }
	 
//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public boolean isAnagram2(String s, String t) {
		int[] sCounts = new int[26];
		int[] tCounts = new int[26];
		for (char ch : s.toCharArray()) {
			sCounts[ch - 'a']++;
		}
		for (char ch : t.toCharArray()) {
			tCounts[ch - 'a']++;
		}
		for (int i = 0; i < 26; i++) {
			if (sCounts[i] != tCounts[i]) {
				return false;
			}
		}
		return true;
    }
	//Stream
	public boolean isAnagram4(String s, String t) {
		int[] counts = new int[26];
		t.chars().forEach(tc -> counts[tc - 'a']++);
		s.chars().forEach(cs -> counts[cs - 'a']--);
		return Arrays.stream(counts).allMatch(c -> c == 0);
	}

	//字符串排序
	public boolean isAnagram1(String s, String t) {
		char[] sChars = s.toCharArray();
		char[] tChars = t.toCharArray();
		Arrays.sort(sChars);
		Arrays.sort(tChars);
		return Arrays.equals(sChars, tChars);
	}
}
//leetcode submit region end(Prohibit modification and deletion)

}
